import Toast from '@vant/weapp/toast/toast';
const now = new Date().toISOString().substring(0, 10);

Page({
  data: {
    now: now,
    requirement: '', // 约拍要求
    production: "", // 拍摄成片
    shootingTime: '', // 拍摄时间
    shootingLocation: '', // 拍摄地点
    chargeMode: "", // 当前选择的收费模式
    chargeModes: ["希望互免", "费用协商", "需要付费","愿意付费"], // 收费模式选项
    region: [], // 当前选择的地区
    regionValue: [], // 地区选择器的默认值
    tags: [], // 标签列表
    selectedTags: [], // 选中的标签对象数组
    imageList: [], // 上传的图片列表
    videoList: [], // 上传的视频列表
    demandType: 0
  },

  onLoad(options) {
    this.getTags(); // 页面加载时获取标签列表
    // 获取传递的参数
    const demandType = options.demandType;
    console.log("传递的参数 demandType:", demandType);

    // 将参数保存到 data 中
    this.setData({
      demandType: demandType,
    });
  },

  // 获取标签列表
  getTags() {
    wx.request({
      url: 'http://localhost:8080/user/common/getTags', // 后端接口地址
      header: {
        token: wx.getStorageSync("userInfo").data.token, // 携带 token
      },
      success: (res) => {
        if (res.data.code === 1) {
          const tags = res.data.data.map(tag => ({
            ...tag,
            selected: false // 初始化选中状态
          }));
          this.setData({ tags });
        } else {
          Toast.fail({
            message: res.data.msg || '获取标签失败',
            context: this, // 确保上下文正确
          });
        }
      },
      fail: (err) => {
        console.error("获取标签错误", err);
        Toast.fail({
          message: '获取标签失败',
          context: this, // 确保上下文正确
        });
      }
    });
  },

  // 切换标签选中状态
  toggleTag(event) {
    const index = event.currentTarget.dataset.index;
    const id = event.currentTarget.dataset.id;
    const name = event.currentTarget.dataset.name; // 获取标签的 name 属性
    const tags = this.data.tags;
    let selectedTags = this.data.selectedTags;

    // 切换选中状态
    tags[index].selected = !tags[index].selected;

    // 更新选中的标签
    if (tags[index].selected) {
      selectedTags.push({ id, name }); // 将标签对象加入数组
    } else {
      selectedTags = selectedTags.filter(item => item.id !== id); // 移除标签对象
    }

    // 更新数据
    this.setData({ tags, selectedTags });
  },

  // 处理约拍要求输入
  onRequirementInput(event) {
    this.setData({ requirement: event.detail.value });
  },

  // 处理拍摄成片输入
  onProductionInput(event) {
    this.setData({ production: event.detail });
  },

  // 处理拍摄时间选择
  onTimeChange(event) {
    const selectedDate = event.detail.value; // 获取选择的日期
    this.setData({ shootingTime: selectedDate });
  },

  // 处理拍摄地点输入
  onLocationInput(event) {
    this.setData({ shootingLocation: event.detail });
  },

  // 处理收费模式选择
  onChargeModeChange(event) {
    const index = event.detail.value;
    this.setData({
      chargeMode: this.data.chargeModes[index]
    });
  },

  // 处理地区选择
  onRegionChange(event) {
    const region = event.detail.value;
    this.setData({
      region: region,
      regionValue: region // 更新地区选择器的默认值
    });
  },

  // 通用的文件上传方法
  uploadFile(filePath, type) {
    const that = this;
    wx.showLoading({ title: '上传中...', mask: true });

    wx.uploadFile({
      url: 'http://localhost:8080/user/common/upload', // 替换为你的后端接口地址
      header: {
        token: wx.getStorageSync("userInfo").data.token, // 携带 token
      },
      filePath: filePath, // 使用传递的文件路径
      name: 'file', // 后端接口接收文件的参数名
      success(res) {
        wx.hideLoading();
        console.log(res);

        if (res.statusCode === 200) {
          const data = JSON.parse(res.data);
          console.log(data.code);

          if (data.code === 1) { // 假设 code 为 1 表示成功
            const serverFilePath = data.data; // 获取返回的文件地址
            console.log('服务器返回的文件地址:', serverFilePath);

            // 根据类型更新文件地址
            if (type === 'image') {
              const imageList = that.data.imageList;
              imageList.push({ url: serverFilePath });
              that.setData({ imageList });
            } else if (type === 'video') {
              const videoList = that.data.videoList;
              videoList.push({ url: serverFilePath });
              that.setData({ videoList });
            }

            Toast.success({
              message: '上传成功',
              context: that, // 确保上下文正确
            });
          } else {
            Toast.fail({
              message: data.msg || '上传失败',
              context: that, // 确保上下文正确
            });
          }
        } else {
          Toast.fail({
            message: '上传失败',
            context: that, // 确保上下文正确
          });
        }
      },
      fail(err) {
        wx.hideLoading();
        Toast.fail({
          message: '上传失败',
          context: that, // 确保上下文正确
        });
        console.error('上传失败:', err);
      },
    });
  },

  // 图片上传后的回调
  onImageRead(event) {
    console.log("event.detail:", event.detail); // 打印 event.detail 的结构
    const { file } = event.detail;
    if (file && file.tempFilePath) {
      console.log("图片地址是:", file.tempFilePath); // 使用 tempFilePath 获取图片地址
      this.uploadFile(file.tempFilePath, 'image'); // 调用通用的上传方法
    } else {
      console.error("文件路径未找到");
    }
  },

  // 视频上传后的回调
  onVideoRead(event) {
    console.log("event.detail:", event.detail); // 打印 event.detail 的结构
    const { file } = event.detail;
    if (file && file.tempFilePath) {
      console.log("视频地址是:", file.tempFilePath); // 使用 tempFilePath 获取视频地址
      this.uploadFile(file.tempFilePath, 'video'); // 调用通用的上传方法
    } else {
      console.error("文件路径未找到");
    }
  },

  // 图片删除后的回调
  onImageDelete(event) {
    const { index } = event.detail; // 获取要删除的图片索引
    const imageList = this.data.imageList; // 获取当前图片列表
    imageList.splice(index, 1); // 删除指定索引的图片
    this.setData({ imageList }); // 更新页面数据
    console.log("删除图片后的列表:", imageList); // 打印删除后的图片列表
  },

  // 视频删除后的回调
  onVideoDelete(event) {
    const { index } = event.detail; // 获取要删除的视频索引
    const videoList = this.data.videoList; // 获取当前视频列表
    videoList.splice(index, 1); // 删除指定索引的视频
    this.setData({ videoList }); // 更新页面数据
    console.log("删除视频后的列表:", videoList); // 打印删除后的视频列表
  },

  // 发布
publish() {
  // 表单验证
  if (!this.data.requirement) {
    Toast('请填写约拍信息');
    return;
  }

  if (this.data.imageList.length === 0 && this.data.videoList.length === 0) {
    Toast('请至少上传一张图片或一个视频');
    return;
  }

  if (!this.data.chargeMode) {
    Toast('请选择收费模式');
    return;
  }

  if (this.data.region.length === 0) {
    Toast('请选择面向地区');
    return;
  }

  if (this.data.selectedTags.length === 0) {
    Toast('请至少选择一个标签');
    return;
  }

  Toast.loading({
    message: '发布中...',
    forbidClick: true,
  });

  // 格式化拍摄时间为完整的日期格式
  const formattedShootingTime = this.data.shootingTime;

  // 将 imageList 转换为只包含 URL 的数组
  const imageUrls = this.data.imageList.map(item => item.url);

  // 将 chargeMode 转换为对应的数字
  const chargeModeMap = {
    "希望互免": 0,
    "费用协商": 1,
    "需要付费": 2,
    "愿意付费": 3
  };
  const chargeModeNumber = chargeModeMap[this.data.chargeMode] || 0; // 默认值为 0

  wx.request({
    url: 'http://localhost:8080/user/demand/add', // 替换成正确的发布接口地址
    method: 'POST',
    header: {
      'Content-Type': 'application/json',
      token: wx.getStorageSync('userInfo').data.token,
    },
    data: {
      demandType: this.data.demandType,
      content: this.data.requirement,
      shootingResult: this.data.production,
      time: formattedShootingTime, // 使用格式化后的日期
      location: this.data.shootingLocation,
      chargingMode: chargeModeNumber, // 提交选择的收费模式对应的数字
      province: this.data.region[0], // 提交选择的地区
      city: this.data.region[1], // 提交选择的地区
      tags: this.data.selectedTags, // 发布时附带选中的标签对象数组
      images: imageUrls, // 提交上传的图片 URL 数组
    },
    success: (res) => {
      console.log(res.data); // 打印完整的响应数据
      Toast.clear();
			if (res.data.code === 1) { // 根据 res.data.data.code 判断是否成功
				console.log("成功")
        Toast.success('发布成功');
        setTimeout(() => {
          wx.navigateBack();
        }, 1500);
      } else {
				console.log("失败")
        Toast.fail('发布失败'); // 使用 res.data.data.message 显示错误信息
      }
    },
    fail: (err) => {
      Toast.clear();
      Toast.fail('发布失败');
      console.error("发布失败", err);
    }
  });
}
});